﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades.Espectaculos;
using System.Configuration;
using System.Data.SqlClient;

namespace Datos.Espectaculos
{
    public class EspArtistaDAL
    {
        private static EspArtistaDAL _instance;

        public static EspArtistaDAL Instance()
        {
            if (_instance == null)
            {
                _instance = new EspArtistaDAL();
            }

            return _instance;
        }

        public static string cnx = ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString();

        public List<EspArtista> ListarArtista(int idSubTipo, int estado, int idRepresentante)
        {
            //string cnx = ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString();
            SqlConnection con = new SqlConnection(cnx);
            SqlCommand com = new SqlCommand("[dbo].[sp_Esp_ListarArtista]", con);
            com.Parameters.AddWithValue("@IdSubtipo", idSubTipo == -1 ? (object)DBNull.Value : idSubTipo);
            com.Parameters.AddWithValue("@Estado", estado == -1 ? (object)DBNull.Value : estado);
            com.Parameters.AddWithValue("@IdRepresentante", idRepresentante == -1 ? (object)DBNull.Value : idRepresentante);
            com.Parameters.AddWithValue("@IdArtista", (object)DBNull.Value);
            com.Parameters.AddWithValue("@IdTipo", (object)DBNull.Value);
            com.Parameters.AddWithValue("@Nombre",(object)DBNull.Value);

            com.CommandType = System.Data.CommandType.StoredProcedure;
            try
            {
                con.Open();
                SqlDataReader dr = com.ExecuteReader();
                List<EspArtista> lista = new List<EspArtista>();
                EspArtista obj = null;
                while (dr.Read())
                {
                    obj = new EspArtista();

                    obj.IdArtista = Convert.ToInt32(dr["IdArtista"].ToString());
                    obj.IdSubtipo = Convert.ToInt32(dr["IdSubtipo"].ToString());
                    obj.IdTipo = Convert.ToInt32(dr["IdTipo"].ToString());
                    obj.IdRepresentante = Convert.ToInt32(dr["IdRepresentante"].ToString());
                    obj.Nombre = dr["Nombre"].ToString();
                    obj.Correo = dr["Correo"].ToString();
                    obj.Direccion = dr["Direccion"].ToString();
                    obj.Telefono = dr["Telefono"].ToString();
                    obj.Referencia = dr["Referencias"].ToString();
                    obj.Observacion = dr["Observaciones"].ToString();
                    obj.Representante = dr["Representante"].ToString();
                    obj.SubTipo = dr["SubTipo"].ToString();
                    obj.Estado = Convert.ToInt32(dr["Estado"].ToString());
                    obj.Tipo = dr["Tipo"].ToString();
                    lista.Add(obj);
                }
                dr.Close();

                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
        }

        public List<EspArtista> ListarArtista(int idSubTipo, int estado, int idRepresentante, int idTipo,string nombre)
        {
            //string cnx = ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString();
            SqlConnection con = new SqlConnection(cnx);
            SqlCommand com = new SqlCommand("[dbo].[sp_Esp_ListarArtista]", con);
            com.Parameters.AddWithValue("@IdSubtipo", idSubTipo == -1 ? (object)DBNull.Value : idSubTipo);
            com.Parameters.AddWithValue("@Estado", estado == -1 ? (object)DBNull.Value : estado);
            com.Parameters.AddWithValue("@IdRepresentante", idRepresentante == -1 ? (object)DBNull.Value : idRepresentante);
            com.Parameters.AddWithValue("@IdArtista", (object)DBNull.Value);
            com.Parameters.AddWithValue("@IdTipo", idTipo == -1 ? (object)DBNull.Value : idTipo);
            com.Parameters.AddWithValue("@Nombre", nombre == "" ? (object)DBNull.Value : nombre);

            com.CommandType = System.Data.CommandType.StoredProcedure;
            try
            {
                con.Open();
                SqlDataReader dr = com.ExecuteReader();
                List<EspArtista> lista = new List<EspArtista>();
                EspArtista obj = null;
                while (dr.Read())
                {
                    obj = new EspArtista();

                    obj.IdArtista = Convert.ToInt32(dr["IdArtista"].ToString());
                    obj.IdSubtipo = Convert.ToInt32(dr["IdSubtipo"].ToString());
                    obj.IdTipo = Convert.ToInt32(dr["IdTipo"].ToString());
                    obj.IdRepresentante = Convert.ToInt32(dr["IdRepresentante"].ToString());
                    obj.Nombre = dr["Nombre"].ToString();
                    obj.Correo = dr["Correo"].ToString();
                    obj.Direccion = dr["Direccion"].ToString();
                    obj.Telefono = dr["Telefono"].ToString();
                    obj.Referencia = dr["Referencias"].ToString();
                    obj.Observacion = dr["Observaciones"].ToString();
                    obj.Representante = dr["Representante"].ToString();
                    obj.SubTipo = dr["SubTipo"].ToString();
                    obj.Estado = Convert.ToInt32(dr["Estado"].ToString());
                    obj.Tipo = dr["Tipo"].ToString();

                    lista.Add(obj);
                }
                dr.Close();

                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
        }

        public EspArtista ObtenerArtista(int IdArtista)
        {
            //string cnx = ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString();
            SqlConnection con = new SqlConnection(cnx);
            SqlCommand com = new SqlCommand("[dbo].[sp_Esp_ListarArtista]", con);
            com.Parameters.AddWithValue("@IdSubtipo", (object)DBNull.Value);
            com.Parameters.AddWithValue("@Estado", (object)DBNull.Value);
            com.Parameters.AddWithValue("@IdRepresentante", (object)DBNull.Value);
            com.Parameters.AddWithValue("@IdArtista", IdArtista);
            com.Parameters.AddWithValue("@IdTipo", (object)DBNull.Value);
            com.Parameters.AddWithValue("@Nombre", (object)DBNull.Value);

            com.CommandType = System.Data.CommandType.StoredProcedure;
            try
            {
                con.Open();
                SqlDataReader dr = com.ExecuteReader();
                EspArtista obj = null;
                while (dr.Read())
                {
                    obj = new EspArtista();

                    obj.IdArtista = Convert.ToInt32(dr["IdArtista"].ToString());
                    obj.IdSubtipo = Convert.ToInt32(dr["IdSubtipo"].ToString());
                    obj.IdTipo = Convert.ToInt32(dr["IdTipo"].ToString());
                    obj.IdRepresentante = Convert.ToInt32(dr["IdRepresentante"].ToString());
                    obj.Nombre = dr["Nombre"].ToString();
                    obj.Correo = dr["Correo"].ToString();
                    obj.Direccion = dr["Direccion"].ToString();
                    obj.Telefono = dr["Telefono"].ToString();
                    obj.Referencia = dr["Referencias"].ToString();
                    obj.Observacion = dr["Observaciones"].ToString();
                    obj.Estado = Convert.ToInt32(dr["Estado"].ToString());
                    obj.Representante = dr["Representante"].ToString();
                    obj.SubTipo = dr["SubTipo"].ToString();
                    obj.Tipo = dr["Tipo"].ToString();
                }
                dr.Close();

                return obj;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
        }

        public int AgregarArtista(EspArtista obj)
        {
            //string cnx = ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString();
            SqlConnection con = new SqlConnection(cnx);
            SqlCommand com = new SqlCommand("[dbo].[sp_Esp_AgregarArtista]", con);

            com.Parameters.AddWithValue("@IdSubtipo", obj.IdSubtipo);
            com.Parameters.AddWithValue("@IdRepresentante", obj.IdRepresentante);
            com.Parameters.AddWithValue("@Nombre", obj.Nombre);
            com.Parameters.AddWithValue("@Correo", obj.Correo);
            com.Parameters.AddWithValue("@Direccion", obj.Direccion);
            com.Parameters.AddWithValue("@Telefono", obj.Telefono);
            com.Parameters.AddWithValue("@Referencia", obj.Referencia);
            com.Parameters.AddWithValue("@Observacion", obj.Observacion);
            com.Parameters.AddWithValue("@Estado", obj.Estado);

            SqlParameter p = new SqlParameter();
            p.Direction = System.Data.ParameterDirection.Output;
            p.Value = 0;
            p.ParameterName = "@newIdArtista";

            com.Parameters.Add(p);

            com.CommandType = System.Data.CommandType.StoredProcedure;
            try
            {
                con.Open();
                com.Transaction = con.BeginTransaction();
                int result = com.ExecuteNonQuery();
                if (result > 0)
                {
                    result = Convert.ToInt32(com.Parameters["@newIdArtista"].Value);
                    com.Transaction.Commit();
                }
                else
                {
                    com.Transaction.Rollback();
                }

                return result;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
        }

        public int ModificarArtista(EspArtista obj)
        {
            //string cnx = ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString();
            SqlConnection con = new SqlConnection(cnx);
            SqlCommand com = new SqlCommand("[dbo].[sp_Esp_ModificarArtista]", con);

            com.Parameters.AddWithValue("@IdArtista", obj.IdArtista);
            com.Parameters.AddWithValue("@IdSubtipo", obj.IdSubtipo);
            com.Parameters.AddWithValue("@IdRepresentante", obj.IdRepresentante);
            com.Parameters.AddWithValue("@Nombre", obj.Nombre);
            com.Parameters.AddWithValue("@Correo", obj.Correo);
            com.Parameters.AddWithValue("@Direccion", obj.Direccion);
            com.Parameters.AddWithValue("@Telefono", obj.Telefono);
            com.Parameters.AddWithValue("@Referencia", obj.Referencia);
            com.Parameters.AddWithValue("@Observacion", obj.Observacion);
            com.Parameters.AddWithValue("@Estado", obj.Estado);

            com.CommandType = System.Data.CommandType.StoredProcedure;
            try
            {
                con.Open();
                com.Transaction = con.BeginTransaction();
                int result = com.ExecuteNonQuery();
                if (result > 0)
                {
                    com.Transaction.Commit();
                }
                else
                {
                    com.Transaction.Rollback();
                }

                return result;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
        }
    }

}
